package code

import (
	"fmt"
)

func Array5() {
	slices1 := []int{1, 2, 3, 4, 5}
	slices2 := []int{5, 4, 3}
	// 切片复制, 属于深拷贝
	copy(slices1, slices2)
	// 修改slice2 并不会对slice1造成影响
	slices2[0] = 10
	fmt.Println(slices1, slices2)
}

func Array6() {
	slices1 := []int{1, 2, 3, 4, 5}
	slices2 := []int{5, 4, 3}
	// 切片复制, 属于深拷贝
	copy(slices2, slices1)
	// 修改slice2 并不会对slice1造成影响
	slices1[0] = 10
	fmt.Println(slices1, slices2)
}

func Array7() {
	//切片扩容
	slices1 := []int{1, 2, 3, 4, 5}
	fmt.Printf("slices1:%v, len:%v, cap:%v\n", slices1, len(slices1), cap(slices1))
	// 会根据长度进行扩容 1: <256(2倍) 2: >=256(newcap += newcap + 3 * 256) >> 2) 直到1.25倍
	// 主要进行内存对齐
	slices2 := append(slices1, 10)
	// 如果容量够，不会新生成一个切片
	slices1[0] = 999
	fmt.Println(slices1, slices2)

	fmt.Println("=================================================")
	s1 := make([]int, 3, 5)
	fmt.Printf("slices1:%v, len:%v, cap:%v\n", s1, len(s1), cap(s1))
	s2 := append(s1, 10)
	s1[0] = 999
	fmt.Println(s1, s2)
}
